iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
自我挑戰組

一個月的後端學習之旅系列 第 29

【DAY29】增刪查改、Join 表格、SQL 與 NoSQL 比較

  • 分享至 

  • xImage
  •  

新增 Create

指定 column name 和要插入的值

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

練習

INSERT INTO employees (employeeID, employeeName, age, salary, supervisor, departmentID)
VALUES(100, "Josh Donaldson", 35, 3500, null, 1);

SELECT * FROM employees; -> 查詢指令

CREATE

所有 column 添加值,則無需指定 column name

需要確保值的順序與表中 column 的順序相同

INSERT INTO table_name
VALUES (value1, value2, value3, ...);

練習

INSERT INTO employees
VALUES(101, "Mike Napoli", 40, 2400, 100, 1);

SELECT * FROM employees; -> 查詢指令

CREATE ALL

假設沒有加 employeeID,結果還會出現 employeeID 是 102,是因為設定 employeeID 時有寫AUTO_INCREMENT

INSERT INTO employees (employeeName, age, salary, supervisor, departmentID)
VALUES("Cody Allen", 37, 2400, 100, 2);

SELECT * FROM employees; -> 查詢指令

CREATE WITHOUT PRIMARY KEY

修改 Update

修改表格中的現有記錄

注意!! WHERE 可以指定應該更新哪些記錄,如果省略 WHERE,表中的所有記錄都將被更新

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition; -> 說明要更改表格中的哪些紀錄的位置

練習

輸入資料時不小心放錯值,108, "Oliver Perez", 30, 1500, 102, 2,如何將 108 改成 107

UPDATE employees
SET employeeID = 107
WHERE employeeID = 108;

UPDATE

刪除 Delete

刪除表格中的現有記錄

省略 WHERE,表中的所有記錄都將被刪除

DELETE 語法只能夠刪除表格中的資料,但表格本身依然存在

DELETE FROM table_name WHERE condition;

練習

DELETE FROM employees WHERE employeeID = 107;

DELETE

刪除表格

DROP TABLE table_name;

查詢 Read

查詢部分資料

SELECT column1, column2, ...
FROM table_name;

練習

SELECT employeeID, employeeName, age
FROM employees;

READ

查詢所有資料

SELECT * FROM table_name;

查詢結果排序

ORDER BY 關鍵字用於對查詢結果按升序或降序進行排序 (默認是升序)

ASC -> 升序,DESC -> 降序

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 (ASC|DESC), column2 (ASC|DESC), …;

練習

SELECT *
FROM employees
ORDER BY age;

ORDER_BY

由大到小

SELECT *
FROM employees
ORDER BY age DESC;

ORDER_BY_DESC

過濾記錄

使用WHERE,可以使用運算符:=, <, <=, >, >=, 不等於<>, IN, BETWEEN, != 等等

SELECT column1, column2, ...
FROM table_name
WHERE condition;

練習

SELECT *
FROM employees
WHERE departmentID = 1
ORDER BY age;

ORDER_BY_WHERE

SELECT *
FROM employees
WHERE departmentID = 1 AND salary >= 2000
ORDER BY age;

ORDER_BY_WHERE_AND

Join 表格

JOIN 用於根據兩個或多個表之間的相關 column 的組合

在 JOIN 兩個資料表時,如果不寫JOIN ON,而是只寫JOIN,則合併的結果為兩個資料表間的笛卡兒乘積 ,也就是兩個資料表中所有的可能組合

SELECT column1, column2, ...
FROM table1
JOIN table2 ON table1.columnName = table2.columnName;

練習

SELECT *
FROM department d
JOIN employees e (後面_e是簡稱)
ON d.headID = e.employeeID;

JOIN

SQL 與 NoSQL 比較

SQL

優點:

  1. 由於關係型資料庫改變表格架構較為困難,通常會保持數據的一致性

  2. 資料庫內的資料表連結性高,可以進行 Join 等複雜查詢

  3. 產品成熟度高穩定性也高,經過多年發展,較少 bug 需要處理,且提供報表生成等商業功能

缺點:

  1. 擴展困難。SQL 通常會垂直擴展 (增加昂貴和重量級的伺服器),單台伺服器要持有整個資料庫來確保可靠性與數據的持續可用性。這樣做的代價就是非常昂貴、擴展受到限制

  2. 成本高:企業級資料庫的 License 價格很驚人,並且隨著系統的規模,而不斷上升

  3. 讀寫慢:這種情況主要發生在數據量達到一定規模時,由於 SQL 的系統邏輯非常複雜(MySQL uses both B-Tree, B+Tree, and HASH indexes ),且有可能死鎖 Deadlock 的併發問題,所以其讀寫速度下滑非常嚴重

NoSQL

優點:

  1. 可擴展性:NoSQL 資料庫一般的設計都能透過硬體的分散式叢集來向外擴展,雲端伺服器供應商通常將這些操作處理成全受管服務

  2. 快速的讀寫:主要例子有 Redis (Remote Dictionary Server),只在 RAM 操作,使得其性能非常出色,每秒可以處理超過 10 萬次讀寫操作。Redis 資料庫的操作,在所有資料都在 RAM 的前提之下,增刪查改都是 O(1)的時間複雜度,不受資料數量影響

  3. 低廉的成本:這是 NoSQL 資料庫共有的特點,因為主要都是開源軟體,沒有昂貴的 License 成本

缺點:

  1. 不提供對 SQL 的支持:因為不支持 SQL 這樣的傳統資料庫,將會對用戶產生一定的學習和應用遷移成本

  2. 支持的特性不夠豐富:現有產品所提供的功能都比較有限,也不像 MS SQL Server 和 Oracle 那樣能提供各種附加功能,比如自動生成報表等

  3. 現有產品的不夠成熟:大多數產品都還處於初創期

下一篇文章是總結。


上一篇
【DAY28】SQL介紹、表格設定
下一篇
【DAY30】鐵人賽完賽&總結
系列文
一個月的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言